package com.hmall.item.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmall.common.dto.PageDTO;
import com.hmall.item.mapper.ItemMapper;
import com.hmall.item.pojo.Item;
import com.hmall.item.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service("itemservice")
@Transactional(readOnly = false, propagation = Propagation.SUPPORTS)
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements ItemService {

    @Autowired
    private ItemMapper itemMapper;

    /**
     * 分页查询所有商品
     *
     * @param page 当前页面
     * @param size 每页的条数
     * @return
     */
    @Override
    public PageDTO<Item> getItemByPage(Integer page, Integer size) {
        //算出起始索引
        Integer index = (page - 1) * size;
        List<Item> items = itemMapper.findItemByPage(index, size);

        Long total = itemMapper.findAllItems();

        return new PageDTO<Item>(total, items);
    }

    /**
     * 添加商品
     *
     * @param item 商品对象
     * @return 返回页面结果
     */
    @Override
    @Transactional
    public void addItem(Item item) {
        //首先根据id查询商品
        Item itemById = itemMapper.findItemById(item.getId());
        //判断该商品是否存在
        if (itemById == null) {
            //说明用户不存在,使用添加商品的方法
           this.save(item);
        }
    }

    /**
     * 通过id查询商品信息
     *
     * @param id 商品id
     * @return
     */
    @Override
    public Item findItemById(Long id) {
        return itemMapper.findItemById(id);
    }

    /**
     * 修改商品状态
     *
     * @param id     商品id
     * @param status 状态
     */
    @Override
    public void updateStatus(Long id, Integer status) {
        //根据id修改状态值
        if (status == 1) {
            itemMapper.updateStatus(id, 1);
        } else if (status == 2) {
            itemMapper.updateStatus(id, 2);
        }
    }

    /**
     * 修改商品,但是要判断状态是否为下架,下架了才可以修改
     *
     * @param item 商品
     */
    @Override
    public void updateItem(Item item) {
        QueryWrapper<Item> wrapper = new QueryWrapper<>();
        wrapper.eq("status", "2");
        int update = itemMapper.update(item, wrapper);
        System.out.println(update);
    }

    /**
     * 根据id删除商品
     *
     * @param id 商品id
     */
    @Override
    public void deleteItem(Long id) {
        itemMapper.deleteById(id);
    }

    /**
     * 根据商品id删除库存
     *
     * @param itemId 商品id
     * @param num    购买商品的数量
     */
    @Override
    public void updateNum(Long itemId, Integer num) {
        Item item = itemMapper.findItemById(itemId);
        //拿出库存做减法
        Integer stock = item.getStock();
        //更新库存
        Integer newStock = stock - num;
        item.setStock(newStock);
        //保存
        this.updateItem(item);
    }

    /**
     * 将订单状态为5的库存加回来
     *
     * @param itemId 订单id
     * @param num    数量
     */
    @Override
    public void updateStock(Long itemId, Integer num) {
        //通过商品id查询商品信息
        Item item = getById(itemId);
        //将库存加上
        Integer stock = item.getStock();

        //更新库存
        Integer newStock = num + stock;
        item.setStock(newStock);
        this.updateItem(item);
    }

}
